package com.qishenyuan.competition.dev;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MyBatisPlusGenerator {

    public static void main(String[] args) {
        // 1. 数据源配置（DataSourceConfig）
        DataSourceConfig dataSourceConfig = new DataSourceConfig
                .Builder("jdbc:mysql://116.205.187.59:3306/competiton_project?allowPublicKeyRetrieval=TRUE&useSSL=FALSE",
                "dev",
                "Hpo*h)Ff9,b&")
                .build();

        // 2. 全局配置（GlobalConfig）
        GlobalConfig globalConfig = new GlobalConfig
                .Builder()
                // 生成文件的输出目录
                .outputDir(System.getProperty("user.dir") + "/src/main/java")
                // 作者
                .author("qishenyuan")
                // 生成完毕后是否打开输出目录
                .disableOpenDir()  // 相当于 setOpen(false)
                // 是否覆盖已有文件（默认 false）
                // .fileOverride() // 如果需要覆盖，则启用
                // 日期类型，仅使用 java.util.Date
                .dateType(DateType.ONLY_DATE)
                .build();

        // 3. 包配置（PackageConfig）
        PackageConfig packageConfig = new PackageConfig
                .Builder()
                // 父包名
                .parent("com.qishenyuan.competition")
                // Entity 包名
                .entity("model")
                // Mapper 包名
                .mapper("dao")
                // XML 映射文件存放包名（会生成在 resources 下的 dao/mapper 目录）
                .xml("dao.mapper")
                .build();

        // 4. 策略配置（StrategyConfig）
        StrategyConfig strategyConfig = new StrategyConfig
                .Builder()
                // 设置需要生成的表
                .addInclude("resume")
                // 表前缀（可选）
                .addTablePrefix("")
                // 实体策略配置
                .entityBuilder()
                // 下划线转驼峰
                .naming(NamingStrategy.underline_to_camel)
                .columnNaming(NamingStrategy.underline_to_camel)
                // 是否启用 lombok（原 setEntityLombokModel）
                .enableLombok() // 你原先写的是 false
                // 主键策略
                .idType(IdType.AUTO)
                .build()
                // Mapper 策略配置
                .mapperBuilder()
                // 设置 Mapper 类文件名后缀：%s 为表名转换后的实体名
                .formatMapperFileName("%sDao") // 相当于 setMapperName("%sDao")
                // XML 文件名
                .formatXmlFileName("%sMapper")
                .build()
                // Service 策略配置
                .serviceBuilder()
                // 去掉Service接口首字母I
                .formatServiceFileName("%sService") // 相当于 setServiceName("%sService")
                .build()
                // Controller 策略配置
                .controllerBuilder()
                // RestController 风格
                .enableRestStyle()
                .build();

        // 5. 组装代码生成器（AutoGenerator）
        AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig);
        // 设置全局配置
        autoGenerator.global(globalConfig);
        // 设置包配置
        autoGenerator.packageInfo(packageConfig);
        // 设置策略配置
        autoGenerator.strategy(strategyConfig);

        // 6. 执行生成
        autoGenerator.execute();
    }
}
